//
//  HomeTableViewController.swift
//  sinaweiboFirst
//
//  Created by mac on 16/3/6.
//  Copyright © 2016年 mac. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD

// 定义首页重用标识符 手写代码 1.注册可重用的标识符 2.从缓存池中根据重用标识符 获取cell
//sb中直接属性栏设置重用标识符
private let HomeCellID = "HomeCellID"

class HomeTableViewController: BaseTableViewController {
   
    //数据源属性 可变数组
    lazy var statuses = [Status]()
    
    //全局的刷新视图属性
    let myRefresh = WBRefreshControl()
    
    override func viewDidLoad() {
        super.viewDidLoad()
       
        if !userLogin {
        
            //设置访客视图信息
            visitorLoginView?.setupInfoWith("关注一些人,回到这里看看有什么惊喜", imageName: nil)
            //用户没有登录
            return
        }
        //准备tableView
        prepareForTableView()
        
    }
    
    //已经出现 再加载数据
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        loadData()
    }
    
    
    private func prepareForTableView() {
        //注册cell OC -> [UITableViewCell Class]  swift -> UITableViewCell.self
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellID)
        
        //设置cell的固定高度
//tableView自动计算行高要设置两个属性 预估行高～接近真实行高 
//        contenSize = estimagedRowHeight * count
        
        tableView.estimatedRowHeight = 300
        
//tableView固定行高 应该设置自动计算 要对contentView底部添加约束 告诉自动布局系统 contentView的底部应该放在哪里
        tableView.rowHeight = UITableViewAutomaticDimension
        
//        tableView.rowHeight = 260
        
        //设置分割线
        tableView.separatorStyle = .None
      
        //添加事件
        myRefresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        
        self.tableView.addSubview(myRefresh)
        
        //可以把footView设置一个view 把tableview的线隐藏
        
        //添加到footView
        tableView.tableFooterView = indicatorView
        
        //开始转动小菊花 应该在开始加载老数据转动菊花
//        indicatorView.startAnimating()
        
        //点击顶部状态栏 能够滚动到顶部
        tableView.scrollsToTop = true
   
    }
    
    @objc private func loadData() {

        //加载数据前 开始转动小菊花
        refreshControl?.beginRefreshing()
        
        //添加 since_id  max_id  同时指定值获取不到新数据 服务器无法判断要获取什么数据 互斥参数
//        var since_id = self.statuses.first?.id ?? 0
//        let max_id = self.statuses.last?.id ?? 0
        var since_id: Int64 = 0
        var max_id: Int64 = 0
        if indicatorView.isAnimating() {
        
            //正在上拉加载数据
            max_id = self.statuses.last?.id ?? 0
        } else {
        
            //正在下拉刷新数据
            since_id = self.statuses.first?.id ?? 0
        }
        
        Status.loadHomeData(since_id,max_id: max_id) { (array) -> () in

            //加载数据后 停止转动小菊花 将自定义的刷新控件更改为normal状态
            self.myRefresh.endRefreshing()
            
            guard let list = array else {
                //界面层 应该和用户交互
                SVProgressHUD.showErrorWithStatus(appNetTip)
                return
            }
            
            if since_id > 0 {
            
                //下拉刷新
                self.statuses = list + self.statuses
            } else {
                
                //关闭小菊花的转动 为了第二次加载更多的数据能够执行响应的加载数据的方法
                self.indicatorView.stopAnimating()
                
                
                //保存数组
                self.statuses += list
            }

            //刷新页面
            self.tableView.reloadData()
        }
    }
    //底部小菊花
    private lazy var indicatorView: UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
}

//tableView的数据源方法 重复遵守协议会保存

extension HomeTableViewController {
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statuses.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        //textLabel 是延迟加载 调用时会被实例化 并被添加到contentview中
        
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellID, forIndexPath: indexPath) as! StatusCell

        let data = statuses[indexPath.row]
        cell.status = data
        
        
//        print(data.id)
        
        //打印图片数量
//        print(data.imageURLs?.count)
        
        //将要显示最后一行数据 开始加载老数据  后面的 !indicatorView.isAnimating()是为了实现静默加载 不加会频繁的访问接口 (上下滚动菊花一直在)
        if indexPath.row == statuses.count - 1 && !indicatorView.isAnimating() {
        
            //开始转动底部菊花 加载数据
            indicatorView.startAnimating()
            print("开始静静加载数据")
            
            //开始加载数据
            loadData()
        }
 
        return cell
    }
}


